#ifndef MODEL_H
#define MODEL_H
#include <QVector>
#define INF 40000
class Model
{
public:
    /** 模型构造函数
     * @brief Model
     * @param num 点的个数
     */
    Model(int num);
    /** 复制构造函数
     * @brief Model
     * @param another
     */
    Model(const Model & another);
    /**
     * @brief Model 析构函数
     */
    virtual ~Model();
    /**
     * @brief addEdge 添加一条新边,需要子类实现
     * @param start 起点
     * @param end   终点
     * @param length  长度
     */
    virtual void addEdge(int start,int end,int length)=0;
    /**
     * @brief updateDistance 根据子类的数据结构更新父类的路径和距离
     */
    virtual void updateDistance() = 0;
    /**
     * @brief step 进行一次求解
     * @return 是否还有解
     */
    bool step();
    bool * flag;    //标记点是否经过
    int num;    //点数量
    int * distance;//到各点距离
    int current;//临时保存点
    bool finish;//模型是否有解
    QVector<int> solvePath;//保存求解时的路线
    QVector<QVector<int> > path;//路径
};

#endif // MODEL_H
